package avicit.cbb.tabledefine.service;

import avicit.platform6.core.jdbc.Page;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 金航数码科技有限责任公司
 * </p>
 * <p>
 * 作者：王旭
 * </p>
 * <p>
 * 邮箱：wangxu01@avicit.com
 * </p>
 * <p>
 * 创建时间： 2014-9-23 上午11:05:14
 * </p>
 * <p>
 * 类说明：库表自定义模块接口
 * </p>
 * <p>
 * 修改记录：
 * </p>
 */
public interface CommTableManagerIntfsService {

	/**
	 * 创建表与节点关联关系
	 *
	 * @author 王旭
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param nodeId
	 * @param tableId
	 * @param param
	 * 				key:TAB_FLAG value:string (结构类型 0：案卷级，1：盒级)
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void createCbbTabNodeByIntfs(String orgId, String deptId, String sysId, String nodeId, String tableId, String loginUserId, String loginIp, Map<String, Object> param) throws Exception;

	/**
	 * 根据节点ID和表ID，删除表与节点关联关系
	 *
	 * @author 王旭
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param nodeId
	 * @param tableId
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void deleteCbbTabNodeByNodeIdAndTabIdByIntfs(String orgId, String deptId, String sysId, String nodeId, String tableId) throws Exception;

	/**
	 * 根据节点ID，删除表与节点关联关系
	 *
	 * @author 王旭
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param nodeId
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void deleteCbbTabNodeByNodeIdByIntfs(String orgId, String deptId, String sysId, String nodeId) throws Exception;

	/**
	 * 创建库表
	 *
	 * @author 王旭
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param nodeId
	 * @param nodeName
	 * @param tabLevel
	 *            （库表层级）
	 * @param moreLevelName
	 *            （多层级名称字符串，使用分号隔开）
	 * @param loginUserId
	 *            （userId）
	 * @param loginIp
	 *            （ip）
	 * @param ifTrue
	 *            （是否为真实表）
	 * @param nodeCode
	 * @param param
	 *				key:TAB_FLAG value:string (结构类型 0：案卷级，1：盒级)
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void createCbbTableByIntfs(String orgId, String deptId, String sysId, String nodeId, String nodeName, String tabLevel, String moreLevelName, String loginUserId,
                                      String loginIp, boolean ifTrue, String nodeCode, Map<String, Object> param) throws Exception;

	/**
	 * 根据节点ID，删除库表信息（所有与库表相关的信息）
	 *
	 * @author 王旭
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param nodeId
	 * @param isTrueTable
	 *            (0 虚拟表 1 真实表)
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void deleteCbbTableByNodeIdByIntfs(String orgId, String deptId, String sysId, String nodeId, String isTrueTable) throws Exception;

	/**
	 * 拷贝库表
	 *
	 * @author 王旭
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param oldNodeId
	 * @param newNodeId
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void copyCbbTableByNodeIdByIntfs(String orgId, String deptId, String sysId, String oldNodeId, String newNodeId, String loginUserId, String loginIp, boolean ifTrue)
			throws Exception;

	/**
	 * 创建节点著录定义
	 *
	 * @author 王旭
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param nodeId
	 * @param tableId
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void createCbbTabNodeRecordByIntfs(String orgId, String deptId, String sysId, String nodeId, String tableId) throws Exception;

	/**
	 * 节点著录定义添加字段信息
	 *
	 * @author 王旭
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param nodeId
	 * @param tableId
	 * @param colId
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void addCbbTabNodeRecordFieldByIntfs(String orgId, String deptId, String sysId, String nodeId, String tableId, String colId) throws Exception;

	/**
	 * 节点著录定义删除字段信息
	 *
	 * @author 王旭
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param nodeId
	 * @param tableId
	 * @param colId
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void deleteCbbTabNodeRecordFieldByIntfs(String orgId, String deptId, String sysId, String nodeId, String tableId, String colId) throws Exception;

	/**
	 * 根据系统标识ID，表名，获取表ID
	 *
	 * @author 王旭
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param tableName
	 * @return
	 * @throws Exception
	 *             String
	 * @throws
	 */
	public String getCbbTableIdByIntfs(String orgId, String deptId, String sysId, String tableName) throws Exception;

	/**
	 * 获取表与节点关系ID
	 *
	 * @author 王旭
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param nodeId
	 * @param tableId
	 * @return
	 * @throws Exception
	 *             String
	 * @throws
	 */
	public String getCbbTabNodeIdByIntfs(String orgId, String deptId, String sysId, String nodeId, String tableId) throws Exception;

	/**
	 * 获取库表信息
	 *
	 * @author 王旭
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param nodeId
	 * @param cbbTableIndex
	 *            （表索引：1，2，3...N；对应说明：主，子，子子...）
	 * @return  List<Map<String,Object>>
	 *             案卷级盒级判断标识 key : TAB_FLAG  value : 0-案卷级，1-盒级
	 * @throws Exception
	 */
	public List<Map<String, Object>> getCbbTableInfoByNodeIdByIntfs(String orgId, String deptId, String sysId, String nodeId, String cbbTableIndex) throws Exception;

	/**
	 * 获取系统初始字段信息
	 *
	 * @author 王旭
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @return
	 * @throws Exception
	 *             List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getCbbSysInitFieldsByIntfs(String orgId, String deptId, String sysId) throws Exception;

	/**
	 * 根据字段类型，获取系统初始字段信息
	 *
	 * @author 王旭
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param colType
	 * @return
	 * @throws Exception
	 *             List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getCbbSysInitFieldsByColTypeByIntfs(String orgId, String deptId, String sysId, String colType) throws Exception;

	/**
	 * 获取字段信息
	 *
	 * @author 王旭
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param nodeId
	 * @param tableId
	 * @return
	 * @throws Exception
	 *             List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getCbbTabColumnsByIntfs(String orgId, String deptId, String sysId, String nodeId, String tableId) throws Exception;

	/**
	 * 根据标识条件，获取字段信息
	 *
	 * @author 王旭
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param tableName
	 * @param isAll
	 *            （Y：获取所有字段信息；N：获取非系统初始字段信息）
	 * @return
	 * @throws Exception
	 *             List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getCbbFieldsByIsAllByIntfs(String orgId, String deptId, String sysId, String tableName, String isAll) throws Exception;

	/**
	 * 根据节点ID，获取表IDS
	 *
	 * @author 王旭
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param nodeId
	 * @return
	 * @throws Exception
	 *             List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getCbbTableIdsByNodeIdByIntfs(String orgId, String deptId, String sysId, String nodeId) throws Exception;

	/**
	 * 根据表ID，获取表信息以及列信息
	 *
	 * @author 王旭
	 * @param tableId
	 * @return
	 * @throws Exception
	 *             List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getCbbTableAndColumnsByTabIdByIntfs(String tableId) throws Exception;

	/**
	 * 根据表名，获取表信息以及列信息
	 *
	 * @author 王旭
	 * @param tableName
	 * @return
	 * @throws Exception
	 *             List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getCbbTableAndColumnsByTabNameByIntfs(String orgId, String deptId, String sysId, String tableName) throws Exception;
	/**
	* @Title: getCbbTableAndColumnsByTabNameByIntfsItera
	* @Description:  我的订阅独有的查询公共字段方法
	* @param orgId
	* @param deptId
	* @param sysId
	* @param tableName
	* @return java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
	* @date 2019-10-12
	* @author HuangJian
	*/
	public List<Map<String, Object>> getCbbTableAndColumnsByTabNameByIntfsItera(String orgId, String deptId, String sysId, String tableName) throws Exception;

	/**
	 * 获取某系统标识下已定义的所有物理表信息
	 *
	 * @author 王旭
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @return
	 * @throws Exception
	 *             List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getCbbAllTablesBySysIdByIntfs(String orgId, String deptId, String sysId) throws Exception;

	/**
	 * 根据节点ID，获取最大表名
	 *
	 * @author 王旭
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param nodeId
	 * @return
	 * @throws Exception
	 *             String
	 * @throws
	 */
	public String getCbbMaxTableNameByNodeIdByIntfs(String orgId, String deptId, String sysId, String nodeId) throws Exception;

	/**
	 * 根据表ID，获取节点信息
	 *
	 * @author 王旭
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param tableId
	 * @return
	 * @throws Exception
	 *             List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getNodesByTableIdSysIdByIntfs(String orgId, String deptId, String sysId, String tableId) throws Exception;

	/**
	 * 根据列ID，获取列信息
	 *
	 * @author 朱锋
	 * @param colId
	 * @return
	 * @throws Exception
	 *             List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getCbbColumnsByColIdByIntfs(String colId) throws Exception;

	/**
	 * 根据表ID级列英文名，获取列信息
	 *
	 * @author 朱锋
	 * @param tableId
	 * @param colName
	 * @return
	 * @throws Exception
	 *             List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getCbbColumnsByTableIdAndColNameByIntfs(String tableId, String colName) throws Exception;

	/**
	 * 根据模版代码获取模版ID
	 *
	 * @author 朱锋
	 * @param templetInfoCode
	 * @return
	 * @throws Exception
	 *             String
	 * @throws
	 */
	public String getTempletIdByTempletCode(String templetInfoCode) throws Exception;

	/**
	 * 根据表ID，获取列信息
	 *
	 * @author 朱锋
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param tableId
	 * @param isAll
	 * @return
	 * @throws Exception
	 *             List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getCbbTabColumnsByIsAllByIntfs(String orgId, String deptId, String sysId, String tableId, String isAll) throws Exception;

	/**
	 * 根据表ID，列英文名集合，获取列信息
	 *
	 * @author 朱锋
	 * @param tableId
	 * @param colNameList
	 * @return
	 * @throws Exception
	 *             List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getCbbColumnsByTableIdAndColNameListByIntfs(String tableId, List<String> colNameList) throws Exception;

	/**
	 * 根据列ID，获取该列的组合项配置信息
	 *
	 * @author 朱锋
	 * @param tableId
	 * @return
	 * @throws Exception
	 *             List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getCbbColumnsConfigGropuByColIdByIntfs(String colId) throws Exception;

	/**
	 * 根据列ID，获取该列的组合项配置信息
	 *
	 * @author 朱锋
	 * @param tableId
	 * @return
	 * @throws Exception
	 *             List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getCbbColumnsConfigGropuAndSourceColNameByColIdByIntfs(String colId) throws Exception;

	/**
	 * 根据列ID，获取该列的组合项配置信息
	 *
	 * @author 郭亮
	 * @param tableId
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, Object>> getColSearchByTableId(String tableId) throws Exception;

	/**
	 * 获取数据排序字段
	 *
	 * @author 朱锋
	 * @param tableId
	 * @param sysId
	 * @param orgId
	 * @param deptId
	 * @return List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getColDataOrderByTableId(String tableId, String sysId, String orgId, String deptId);

	/**
	 * 获取排序主表信息（分页）
	 * @param pageNo
	 * @param pageSize
	 * @param parameter
	 * @return
	 * @throws Exception
	 */
	public Page<Map<String, Object>> getPageTabSortList(int pageNo, int pageSize, Map<String, Object> parameter) throws Exception;

	/**
	 * 获取表单排列数据
	 * @param parameter
	 * @return
	 * @throws Exception Map<String,Object>
	 * @throws
	 */
	public Map<String, Object> getColumnPageMap(Map<String, Object> parameter) throws Exception;
	/**
	 * @Title: getColumnPageMapItera
	 * @Description:  获取表单排列数据
	 * @param paramMap
	 * @return java.util.Map<java.lang.String,java.lang.Object>
	 * @date 2019-05-31
	 * @author HuangJian
	 */
	public abstract Map<String, Object> getColumnPageMapItera(Map<String, Object> paramMap,List<Map<String, Object>> columnInfoMap) throws Exception;
	/**
	 * 获取公共字段表中的字段信息
	 * @author 郭亮
	 * @param param key1:sysId value:String 必填
	 * 				key2:orgId value:String 必填
	 * 				key3:tabName
	 * 				key4:tabId
	 * 				key5:type value:String(1：查询字段；2：列表显示字段) 必填
	 * 				key6:isAll value:String(Y：所有字段；N：可见字段) 必填
	 * @return
	 * @throws Exception List<Map<String,Object>>
	 */
	public List<Map<String, Object>> getPublicField(Map<String, Object> param) throws Exception;


	/**
	 * 只根据根据表名，获取表信息以及列信息
	 *
	 * @author 朱锋
	 * @param tableName
	 * @return
	 * @throws Exception
	 *             List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getCbbTableAndColumnsByOnlyTabNameByIntfs(String tableName) throws Exception;

	/**
	 * 根据表名，获取表ID
	 *
	 * @author 朱锋
	 * @param tableName
	 * @return
	 * @throws Exception
	 *             String
	 * @throws
	 */
	public String getCbbTableIdByTableNameIntfs(String tableName) throws Exception;

	/**
	 * 通过参数获取表索引信息集合
	 * @param param
	 * @return
	 * @throws Exception List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getTableIndexByParam(Map<String, Object> param) throws Exception;

	/**
	 * 根据列id和语言code获取 列名
	 * @param columnId
	 * @param languageCode
	 * @return
	 * @throws Exception String
	 * @throws
	 */
	public String getColumnLabelByColumnIdAndLanguageCode(String columnId, String languageCode) throws Exception;

	/**
	 * 根据tableId 和 生成方式获取列信息
	 * @param param
	 * @return
	 * @throws Exception List<CbbTabColumns>
	 * @throws
	 */
	public List<Map<String, Object>> getColumnsByParam(Map<String, Object> param) throws Exception;

	/**
	 * 根据tableId 和 生成方式获取列信息
	 * @param param
	 * @return
	 * @throws Exception List<CbbTabColumns>
	 * @throws
	 */
	public List<Map<String, Object>> getColumnsByParameter(Map<String, Object> param) throws Exception;

	/**
	 * 根据列id获取当前列的通用代码值
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param param
	 * @return
	 * @throws Exception Map<String,Object>
	 * @throws
	 */
	public Map<String, Object> getColumnLookupByColumnId(String orgId, String deptId, String sysId, Map<String, Object> param) throws Exception;

	/**
	 * 查询当前组织下公共字段中所有字段的通用代码值
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param param
	 * @return
	 * @throws Exception Map<String,Map<String,String>>
	 * @throws
	 */
	public Map<String, Map<String, String>> getColumnLookupByPublicTable(String orgId, String deptId, String sysId, Map<String, Object> param) throws Exception;


	/**
	 * 根据表ID查询表下所有字段的通用代码值
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param tableId
	 * @param param
	 * @return
	 * @throws Exception Map<String,Map<String,String>>
	 * @throws
	 */
	public Map<String, Map<String, String>> getColumnLookupByTableId(String orgId, String deptId, String sysId, String tableId,Map<String, Object> param) throws Exception;

	/**
	 * 根据表ID，获取列信息
	 * @author 张余
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param tableId
	 * @param Map
	 * 			showFlag 	0，显示系统字段
	 * 						1，必著
	 * 						2, 显示
	 * 						3， 查询字段
	 * 						4，编辑标识
	 * 						5，列表显示
	 * 						6，详细显示
	 * @return
	 * @throws Exception
	 *             List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getCbbTabColumnsByMap(String orgId, String deptId, String sysId, String tableId, Map<String, Object> map) throws Exception;

	/**
	 * 检查对应模版类型是否存在相同字段
	 * @param param
	 * @return
	 * @throws Exception String
	 * @throws
	 */
	public String checkTemplateFieldsRepeat(Map<String, Object> param) throws Exception;
}
